package com.yc.mapper;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.*;
import com.yc.entity.LeavereQuests;
import org.springframework.security.core.parameters.P;

import java.util.List;
import java.util.Map;

/**
 * 请假表;(leavere_quests)表数据库访问层
 * @date : 2023-6-28
 */
@Mapper
public interface LeavereQuestsMapper  extends BaseMapper<LeavereQuests>{

    /**
     * 通过id删除单条记录
     * @param id 请假id
     */
    @Delete("delete from leavere_quests a where a.id = #{id};")
    void Deletebyid(@Param("id") int id);

    /**
     * 通过请假id查询单条记录
     * @param id 请假id
     * @return 开始时间 结束时间
     */
    @Select("SELECT a.id,a.request_start,a.request_end FROM leavere_quests a WHERE id=#{id}")
    Map<String,Object> selectbyid(@Param("id") int id);

    /**
     * 查询该学生的全部请假记录
     * @param stuid 学生id
     * @return 记录id 请假开始时间 请假结束时间
     */
    @Select("SELECT a.id,a.request_start,a.request_end FROM leavere_quests a WHERE stuid=#{stuid}")
    List<Map<String,Object>> startandendbystuid(@Param("stuid") String stuid);

    /**
     * 分页查询指定行数据
     *
     * @param page 分页参数
     * @param wrapper 动态查询条件
     * @return 分页对象列表
     */
    IPage<LeavereQuests> selectByPage(IPage<LeavereQuests> page , @Param(Constants.WRAPPER) Wrapper<LeavereQuests> wrapper);

    /**
     *@Description 通过学生的id查询对应的课表
     *@Return
     *@Author dm
     *@Date Created in 2023/7/15 18:48
     **/
    LeavereQuests queryByStuid(@Param("stuid") Integer stuid);

    /**
     * 添加请假申请
     * @param stuid 学生id
     * @param starttime 开始时间
     * @param overtime 结束时间
     * @param imagepath 请假条照片
     * @param reason 请假原因
     * @param id 上传者id
     */
    @Insert("INSERT INTO leavere_quests (stuid,request_start,request_end,imagepath,reason,update_time,create_time,create_by,update_by) VALUES\n" +
            "(#{stuid},#{starttime},#{overtime},#{imagepath},#{reason},now(),now(),#{id},#{id})")
    void insertrequest(
            @Param("stuid") String stuid,
            @Param("starttime") String starttime,
            @Param("overtime") String overtime,
            @Param("imagepath") String imagepath,
            @Param("reason") String reason,
            @Param("id") String id
    );

    /**
     * 通过请假表Id查询请假信息
     * @param leaveId
     * @return
     */
    LeavereQuests selectByLeaveId(@Param("leaveId") String leaveId);

    /**
     * 通过学号和当前时间查询请假信息
     * @param stuid 学生学号
     * @return 请假信息
     */
    LeavereQuests selectByStuid(@Param("stuid") String stuid);

    /**
     * 根据班级id去查询该班级请假的人数
     * @param cid
     * @return
     */
    Integer selectCountByCid(String cid);
}
